<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 外部作用域不能访问内部作用域中的变量
        // function outer() {
        //     const a = 10
        // }
        // outer()
        // console.log(a)

        // 闭包的作用(特性)：通过闭包，可以让外部访问到函数内部的变量
        // function outer() {
        //     const a = 10
        //     function fn() {
        //         console.log(a)
        //     }
        //     return fn
        // }
        // outer() === fn ==> function fn() { console.log(a) }
        // const fun = outer()
        // const fun = function fn() {
        //     console.log(a)
        // }
        // 我们在外部调用fun的时候，相当于执行上面注释的函数，执行到log(a),找的是outer函数内部的变量a
        // fun()


        // 闭包的简写形式
        function outer() {
            const a = 10
            return function () {
                console.log(a)
            }
        }
        const fn = outer()
        // const fn = function () {
        //     console.log(a)
        // }
        fn() // 调用函数
    </script>
</body>

</html>